<?php

namespace App\Models;

use Database\Factories\PhoneFactory;
use Dcat\Admin\Traits\HasDateTimeFormatter;
use Eloquent;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Carbon;

/**
 * App\Models\Phone
 *
 * @property int $id
 * @property int $user_id
 * @property string $color
 * @property string $price
 * @property string $number
 * @property Carbon|null $created_at
 * @property Carbon|null $updated_at
 * @property-read User $user
 * @method static PhoneFactory factory(...$parameters)
 * @method static Builder|Phone newModelQuery()
 * @method static Builder|Phone newQuery()
 * @method static Builder|Phone query()
 * @method static Builder|Phone whereColor($value)
 * @method static Builder|Phone whereCreatedAt($value)
 * @method static Builder|Phone whereId($value)
 * @method static Builder|Phone whereNumber($value)
 * @method static Builder|Phone wherePrice($value)
 * @method static Builder|Phone whereUpdatedAt($value)
 * @method static Builder|Phone whereUserId($value)
 * @mixin Eloquent
 */
class Phone extends Model
{
    use HasFactory, HasDateTimeFormatter;

    protected $fillable = ['color', 'number', 'price'];

    /**
     *  定义反向关联，获取拥有此电话的用户
     */
    public function user()
    {
        return $this->belongsTo(User::class)->withDefault();
        // 1. Eloquent 模型通过关联方法 user() 的名称并使用 _id 作为后缀名来确定外键的名称。
        // 2. 在本例中，phone 模型有一个 user_id 字段。但是，如果 phone 模型的外键不是 user_id ,则它可以给 belongsTo 方法的第二个参数传递一个自定义的键名。
        // 3. 如果父模型的主键未使用 id 作为字段名，或者你想用其他字段匹配关联的模型。那么你可以向 belongsTo 方法传递第三个参数，这个参数是父模型中自己定义的字段名称。
        // return $this->belognsTo(User::class, 'foreign_key', 'owener_key');
    }
}
